<?php
//后台登陆
namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;


class LoginController extends Controller
{
    public function __construct()
    {
        //检查是否登陆了的中间件
        //$this->middleware(['ckadminlogin:login']);
        //这个必须不执行，否则会重定向死循环
        //执行中间件CheckAdminLogin->
        //redirect到LoginController->
        //执行中间件CheckAdminLogin->
        //redirect到LoginController->
        //......
    }

    //登陆显示
    public function index() {
        //判断用户是否已经登陆过
        if (auth()->check()) {
            //如果用户已经登陆了，而且用户进了http://www.zfw.com/admin/login,就自动重定向到http://www.zfw.com/admin/index去
            return redirect(route('admin.index'));
            //return view('admin.index.index');这是错误用法，虽然也能看到index.blade.php页面
        }
        return view('admin.login.login');
    }

    //登陆post 别名 admin.login 根据别名生成url route('别名')
    public function login(Request $req) {
        //dump($req->except('_token'));用这个还不如用下面$post_args，不带_token
        //表单验证
        $messages = [
            'username.required' => '账号必须得写啊大哥'
        ];
        $post_args = $this->validate($req, [
            'username' => 'required',
            'password' => 'required'
        ], $messages);
        //dump($post_args);

        //登陆
        //原理:config/auth.php的'defaults' 的'guard'=>'web'
        //对应'guards'的'web'
        //'provider' => 'users',
        //'users'找到 'model' => App\Models\User::class,
        //去App\Models\User对应的数据库表查条件为$post_args数组的记录
        //返回true/false
        $ret = auth()->attempt($post_args);
        if ($ret) {
//            dump(auth()->user()->toArray());
            //跳转到后台页面

            //得到权限
            $userModel = auth()->user();
            $roleModel = $userModel->rel_role;
            $nodeArr = $roleModel->nodes()->pluck('route_name', 'id')->toArray();
            //节点保存到session, 缺点：更新权限后要重新登陆
            session(['admin.node_ids' => $nodeArr]);

            return redirect(route('admin.index'));
        }

        //withErrors(Flash a container of errors to the session.)会把信息写入$errors
        return redirect(route('admin.login'))->withErrors(['登陆失败,请输入正确的账号信息']);
    }
}
